const VNodeFlags = {
    ELEMENT_HTML:1, // html 标签
    // 左移 =  *2
    ELEMENT_SVG:1<<1,  // svg 标签

    COMPONENT_STATEFUL_NORMAL: 1<<2 , // 普通有状态组件

    COMPONENT_STATEFUL_SHOULD_KEEP_ALIVE:1<<3,  // 需要被keepAlive的组件

    COMPONENT_STATEFUL_KEPT_ALIVE:1<<4,  // 需要被keepAlive的组件

    COMPONENT_FUNCTIONAL:1<<5,  // 函数式组件

    TEXT:1<<6, //文本

    FRAGMENT:1<<7,  // fragment 文档碎片

    PORTAL:1<<8 ,  // 提供一种将子组件/节点  渲染到父节点之外的地方的实现
}

VNodeFlags.ELEMENT=VNodeFlags.ELEMENT_HTML | VNodeFlags.ELEMENT_SVG
VNodeFlags.COMPONENT_STATEFUL = VNodeFlags.COMPONENT_STATEFUL_NORMAL | VNodeFlags.COMPONENT_STATEFUL_SHOULD_KEEP_ALIVE | VNodeFlags.COMPONENT_STATEFUL_KEPT_ALIVE
VNodeFlags.COMPONENT = VNodeFlags.COMPONENT_FUNCTIONAL | VNodeFlags.COMPONENT_STATEFUL_KEPT_ALIVE | VNodeFlags.COMPONENT_STATEFUL_NORMAL | VNodeFlags.COMPONENT_STATEFUL_SHOULD_KEEP_ALIVE


const ChildrenFlags = {
    UNKNOWN_CHILDREN:0,
    NO_CHILDERN:1,
    SINGLE_VNODE:1<<1,
    // 拥有key 的多个节点，hashmap O(1)
    KEYED_VNODES:1<<2,
    // 多个没有key的节点
    NO_KEYED_NODES:1<<3
}

ChildrenFlags.MULTIPLE_VNODES = 
        ChildrenFlags.KEYED_VNODES | ChildrenFlags.NODE_KEYED_NODES;

export  {VNodeFlags ,ChildrenFlags}